using System;
using System.Collections;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;

using WHC.Pager.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using WHC.Hotel.Entity;
using WHC.Hotel.IDAL;
using WHC.OrderWater.Commons;

namespace WHC.Hotel.DAL
{
	/// <summary>
	/// RoomDiscount 的摘要说明。
	/// </summary>
	public class RoomDiscount : BaseDAL<RoomDiscountInfo>, IRoomDiscount
	{
		#region 对象实例及构造函数

		public static RoomDiscount Instance
		{
			get
			{
				return new RoomDiscount();
			}
		}
		public RoomDiscount() : base("KF_RoomDiscount","ID")
		{
		}

		#endregion

		/// <summary>
		/// 将DataReader的属性值转化为实体类的属性值，返回实体类
		/// </summary>
		/// <param name="dr">有效的DataReader对象</param>
		/// <returns>实体类对象</returns>
		protected override RoomDiscountInfo DataReaderToEntity(IDataReader dataReader)
		{
			RoomDiscountInfo roomDiscountInfo = new RoomDiscountInfo();
			SmartDataReader reader = new SmartDataReader(dataReader);
			
			roomDiscountInfo.ID = reader.GetInt32("ID");
            roomDiscountInfo.RoomType = reader.GetString("RoomType");
			roomDiscountInfo.Price = reader.GetDecimal("Price");
			roomDiscountInfo.CustomerGrade = reader.GetString("CustomerGrade");
			roomDiscountInfo.DiscountRate = reader.GetDouble("DiscountRate");
			roomDiscountInfo.DiscountPrice = reader.GetDecimal("DiscountPrice");
			
			return roomDiscountInfo;
		}

		/// <summary>
		/// 将实体对象的属性值转化为Hashtable对应的键值
		/// </summary>
		/// <param name="obj">有效的实体对象</param>
		/// <returns>包含键值映射的Hashtable</returns>
        protected override Hashtable GetHashByEntity(RoomDiscountInfo obj)
		{
		    RoomDiscountInfo info = obj as RoomDiscountInfo;
			Hashtable hash = new Hashtable(); 
			
 			hash.Add("RoomType", info.RoomType);
 			hash.Add("Price", info.Price);
 			hash.Add("CustomerGrade", info.CustomerGrade);
 			hash.Add("DiscountRate", info.DiscountRate);
 			hash.Add("DiscountPrice", info.DiscountPrice);
 				
			return hash;
		}

        public List<RoomDiscountInfo> GetDiscountList(string roomType)
        {
            string condition = string.Format("RoomType ='{0}' ", roomType);
            return Find(condition);
        }

        public RoomDiscountInfo GetDiscount(string roomType, string customerGrade)
        {
            string condition = string.Format("RoomType ='{0}' and CustomerGrade='{1}' ", roomType, customerGrade);
            return FindSingle(condition);
        }

    }
}